/******** 动态获取的路由上获取meta值, 并决定当前按钮是否显示 ********/
// 使用方法: v-has="add" add是你的按钮名称
export default Vue => {
    return Vue.directive('has', {
        bind(el, binding, vnode) {
            // context._vnode
            let _this = vnode.context;

            _this.$nextTick(() => {
                let rawName = binding.rawName.replace('v-has:', '');
                // 用URL+指令标签名 匹配权限表 (例如: PersonnelManagement:Lists:refresh)
                let pre =
                    _this.$store.getters.permissions[
                        _this.$route.path
                            .split('/')[1]
                            .replace(/^(\/bui_|\/pages_)/, '')
                            .replace(/_/g, ':')
                            .replace(/\//g, '') +
                            ':' +
                            rawName
                    ];
                if (!pre) {
                    if (el && el.parentNode) {
                        el.parentNode.removeChild(el);
                    } else {
                        return false;
                    }
                }

                // addFormCache 记录当前按钮触发arg参数,如 v-has:add
                // 与后端预定,必须以add开头的参数(新增页面),才会启用此功能
                if (
                    Vue.config.addFormCache &&
                    binding.arg.indexOf('add') >= 0
                ) {
                    el.addEventListener('click', () => {
                        sessionStorage.setItem(
                            'addFormCache',
                            _this.$route.path + '/' + binding.arg
                        );
                    });
                }
            });
        }
    });
};
